In storage systems, caching generally refers to storing data in a faster storage tier for quicker response times when a host next requests the same data. Predictive caching refers to the ability of a storage system to populate a faster storage tier with data in anticipation of access so as to maximize access performance while minimizing data movement overhead across storage tiers. Current approaches rely upon spatial locality at fine granularity (with respect to the size of the datasets generally) although the large datasets do not exhibit sufficient access locality.
Typical approaches to predictive caching focus on a short look-ahead time frame, such as on the order of just a few seconds. Using these approaches for longer-term predictions, however, becomes unwieldy due to the increase in overhead for the tracking as well as a potential mismatch in size between the predicted dataset and the size of the cache (e.g., prediction of 100 GB of data versus a cache size of 1 GB). Further, loading data prematurely into a faster storage tier can jeopardize cache hits that could have otherwise been possible with data already in the cache.
Loading data from a slower storage tier may consume a non-trivial amount of time, for example where the upcoming shift in working dataset is large. Delaying the preloading too much, i.e. by relying on short-term caching solutions, may cause the desired data to arrive too late to the cache to contribute to application hits, thereby further harming system performance.